﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Reflection;

namespace Controller2.BLL
{
    public class FuncoesAuxiliaresBll
    {
        public static DataTable DataTableFromIEnumerable(IEnumerable ien)
        {
            DataTable dt = new DataTable();
            foreach (object obj in ien)
            {
                Type t = obj.GetType();
                PropertyInfo[] pis = t.GetProperties();
                if (dt.Columns.Count == 0)
                {
                    foreach (PropertyInfo pi in pis)
                    {
                        Type pt = pi.PropertyType;
                        if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(Nullable<>))
                            pt = Nullable.GetUnderlyingType(pt);
                        dt.Columns.Add(pi.Name, pt);
                    }
                }
                DataRow dr = dt.NewRow();
                foreach (PropertyInfo pi in pis)
                {
                    object value = pi.GetValue(obj, null);
                    dr[pi.Name] = value == null ? DBNull.Value : value;
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }

        public static Dictionary<string, int> PreencheComboStatus()
        {
            var dic = new Dictionary<string, int>();
            dic.Add("Aberto", 1);
            dic.Add("Em Andamento", 2);
            dic.Add("Concluído", 3);
            dic.Add("Pausado", 4);
            dic.Add("Cancelado", 5);
            dic.Add("Com Impedimento", 6);
            return dic;
        }

        public static Dictionary<string, int> PreencheComboEtapa()
        {
            var dic = new Dictionary<string, int>();
            dic.Add("Levantamento", 1);
            dic.Add("Planejamento", 2);
            dic.Add("Orçamento", 3);
            dic.Add("Criação", 4);
            dic.Add("Produção", 5);
            dic.Add("Veiculação", 6);
            return dic;
        }

        public static string GetStatus(int status)
        {
            switch (status)
            {
                default:
                case 1: return "Aberto";
                case 2: return "Em Andamento";
                case 3: return "Concluído";
                case 4: return "Pausado";
                case 5: return "Cancelado";
                case 6: return "Com Impedimento";
            }
        }

        public static string GetEtapa(int etapa)
        {
            switch (etapa)
            {
                default:
                case 1: return "Levantamento";
                case 2: return "Planejamento";
                case 3: return "Orçamento";
                case 4: return "Criação";
                case 5: return "Produção";
                case 6: return "Veiculação";
            }
        }
    }
}